#include "foc.h"

/**
 * Clarke逆变换：将αβ轴分量转换为三相ABC分量
 * @param alpha α轴分量
 * @param beta  β轴分量
 * @param a     输出A相分量
 * @param b     输出B相分量
 * @param c     输出C相分量
 */
void inverse_clarke(float alpha, float beta, float *a, float *b, float *c)
{
  *a = alpha;
  *b = -0.5f * alpha + 0.8660254f * beta; // 0.8660254 = sqrt(3)/2
  *c = -0.5f * alpha - 0.8660254f * beta;
}

/**
 * Park逆变换：将dq轴分量转换为αβ轴分量
 * @param d     d轴分量
 * @param q     q轴分量
 * @param theta 电角度（弧度）
 * @param alpha 输出α轴分量
 * @param beta  输出β轴分量
 */
void inverse_park(float d, float q, float theta, float *alpha, float *beta)
{
  float sin_val = sinf(theta);
  float cos_val = cosf(theta);

  *alpha = d * cos_val - q * sin_val;
  *beta = d * sin_val + q * cos_val;
}
